package leetcode.code0038;

import leetcode.IDebug;
import leetcode.helper.HelpDebug;

public class Solution38 implements IDebug {

	public static void main(String[] args) {
		Solution38 so = new Solution38();
//		so.debug1();
		System.out.println(so.countAndSay1(4));
	}

	/**
	 *
	 * @param n
	 * @return
	 */
	public String countAndSay1(int n) {
		char[] say = new char[] { '1' };
		StringBuffer ans = new StringBuffer();
		for (int i = 0; i < n - 1; i++) {
			ans.setLength(0);
			char cur = say[0];// 第一位数字
			int count = 1;// 有几个
			for (int j = 1; j < say.length; j++) {
				if (say[j] == cur) {
					count++;// 相同则多一个
				} else {
					ans.append(count).append(cur);// 不同收集答案
					cur = say[j];// 重新计数字
					count = 1;// 重新计数
				}
			}
			ans.append(count).append(cur);
			say = ans.toString().toCharArray();
		}
		return new String(say);
	}

	/**
	 * 递归方式
	 *
	 * @param n
	 * @return
	 */
	public String countAndSay(int n) {
		if (n == 1) {
			return "1";// n为1
		}
		char[] say = countAndSay(n - 1).toCharArray();// 找上一个字符串
		char cur = say[0];// 第一位数字
		int count = 1;// 有几个
		StringBuffer ans = new StringBuffer();
		for (int i = 1; i < say.length; i++) {
			if (say[i] == cur) {
				count++;// 相同则多一个
			} else {
				ans.append(count).append(cur);// 不同收集答案
				cur = say[i];// 重新计数字
				count = 1;// 重新计数
			}
		}
		ans.append(count).append(cur);// 跳出for的最后一个答案, 也是进不了for的第一个答案
		return ans.toString();
	}

	@Override
	public void debug1() {
		int n = 4;
		String e = "1211";
		String r = this.countAndSay(n);
		HelpDebug.compare(e, r);
	}

	@Override
	public void debug2() {
		// TODO Auto-generated method stub

	}

	@Override
	public void debug3() {
		// TODO Auto-generated method stub

	}

	@Override
	public void debug4() {
		// TODO Auto-generated method stub

	}

}
